// 首尾相连的房子不能同时偷，所以可以把首尾相连的房子去掉，然后求解剩下的房子的最大偷取值。

var rob = function(nums) {
  if (nums.length === 0) return 0;
  if (nums.length === 1) return nums[0];
  if (nums.length === 2) return Math.max(nums[0], nums[1]);
  return Math.max(robHelper(nums.slice(0, nums.length - 1)), robHelper(nums.slice(1, nums.length)));
}

const nums = [1];
console.log(rob(nums)); // Output: 3

function robHelper (nums) {
  if(nums.length === 0) return 0;
  if(nums.length === 1) return nums[0];
  if(nums.length === 2) return Math.max(nums[0], nums[1]);

  const dp = new Array(nums.length).fill(0);
    dp[0] = nums[0];
    dp[1] = Math.max(nums[0], nums[1]);

    for (let i = 2; i < nums.length; i++) {
        dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
    }
    return dp[nums.length - 1]; 
}